home *** CD-ROM | disk | FTP | other *** search
- /* $Revision Header *** Header built automatically - do not edit! ***********
- *
- * (C) Copyright 1991 by Torsten Jürgeleit
- *
- * Name .....: editor.c
- * Created ..: Sunday 22-Dec-91 21:22:28
- * Revision .: 1
- *
- * Date Author Comment
- * ========= ==================== ====================
- * 02-Oct-92 Michael Bjerking New realese, better Screen/Window editor
- * 22-Dec-91 Torsten Jürgeleit Created this file!
- *
- ****************************************************************************
- *
- * Editor main display
- *
- * $Revision Header ********************************************************/
-
- /* Includes */
-
- #include "includes.h"
- #include "defines.h"
- #include "imports.h"
- #include "protos.h"
-
- /* Defines for editor gadgets */
-
- #define FIRST_MODE_GADGET EDITOR_GADGET_CREATE
-
- #define EDITOR_GADGET1_TYPE GADGET_DATA_TYPE_CYCLE
- #define EDITOR_GADGET1_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_TEXT_LEFT)
- #define EDITOR_GADGET1_TEXT "_Type"
- #define EDITOR_GADGET1_LEFT_EDGE (10 + (4 + 1) * 8)
- #define EDITOR_GADGET1_TOP_EDGE 5
- #define EDITOR_GADGET1_WIDTH 110
- #define EDITOR_GADGET1_HEIGHT 15
- #define EDITOR_GADGET1_TEXT_ATTR &topaz80_attr
- #define EDITOR_GADGET1_ACTIVE 1
- #define EDITOR_GADGET1_TEXT_ARRAY &template_type_text_array[0]
-
- #define EDITOR_GADGET2_TYPE GADGET_DATA_TYPE_BUTTON
- #define EDITOR_GADGET2_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
- #define EDITOR_GADGET2_LEFT_EDGE (EDITOR_GADGET1_LEFT_EDGE + EDITOR_GADGET1_WIDTH + 80 + 4 * 8)
- #define EDITOR_GADGET2_TOP_EDGE 5
- #define EDITOR_GADGET2_WIDTH ((6 + 3) * 8)
- #define EDITOR_GADGET2_HEIGHT 15
- #define EDITOR_GADGET2_TEXT "_Create"
- #define EDITOR_GADGET2_TEXT_ATTR &topaz80_attr
-
- #define EDITOR_GADGET3_TYPE GADGET_DATA_TYPE_BUTTON
- #define EDITOR_GADGET3_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
- #define EDITOR_GADGET3_LEFT_EDGE (EDITOR_GADGET2_LEFT_EDGE + EDITOR_GADGET2_WIDTH + 10)
- #define EDITOR_GADGET3_TOP_EDGE EDITOR_GADGET2_TOP_EDGE
- #define EDITOR_GADGET3_WIDTH EDITOR_GADGET2_WIDTH
- #define EDITOR_GADGET3_HEIGHT EDITOR_GADGET2_HEIGHT
- #define EDITOR_GADGET3_TEXT "_Modify"
- #define EDITOR_GADGET3_TEXT_ATTR &topaz80_attr
-
- #define EDITOR_GADGET4_TYPE GADGET_DATA_TYPE_BUTTON
- #define EDITOR_GADGET4_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
- #define EDITOR_GADGET4_LEFT_EDGE (EDITOR_GADGET3_LEFT_EDGE + EDITOR_GADGET3_WIDTH + 10)
- #define EDITOR_GADGET4_TOP_EDGE EDITOR_GADGET2_TOP_EDGE
- #define EDITOR_GADGET4_WIDTH EDITOR_GADGET2_WIDTH
- #define EDITOR_GADGET4_HEIGHT EDITOR_GADGET2_HEIGHT
- #define EDITOR_GADGET4_TEXT "C_lone"
- #define EDITOR_GADGET4_TEXT_ATTR &topaz80_attr
-
- #define EDITOR_GADGET5_TYPE GADGET_DATA_TYPE_BUTTON
- #define EDITOR_GADGET5_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
- #define EDITOR_GADGET5_LEFT_EDGE EDITOR_GADGET2_LEFT_EDGE
- #define EDITOR_GADGET5_TOP_EDGE (EDITOR_GADGET2_TOP_EDGE + EDITOR_GADGET2_HEIGHT + 5)
- #define EDITOR_GADGET5_WIDTH EDITOR_GADGET2_WIDTH
- #define EDITOR_GADGET5_HEIGHT EDITOR_GADGET2_HEIGHT
- #define EDITOR_GADGET5_TEXT "_Delete"
- #define EDITOR_GADGET5_TEXT_ATTR &topaz80_attr
-
- #define EDITOR_GADGET6_TYPE GADGET_DATA_TYPE_BUTTON
- #define EDITOR_GADGET6_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
- #define EDITOR_GADGET6_LEFT_EDGE EDITOR_GADGET3_LEFT_EDGE
- #define EDITOR_GADGET6_TOP_EDGE EDITOR_GADGET5_TOP_EDGE
- #define EDITOR_GADGET6_WIDTH EDITOR_GADGET2_WIDTH
- #define EDITOR_GADGET6_HEIGHT EDITOR_GADGET2_HEIGHT
- #define EDITOR_GADGET6_TEXT "_Edit"
- #define EDITOR_GADGET6_TEXT_ATTR &topaz80_attr
-
- #define EDITOR_GADGET7_TYPE GADGET_DATA_TYPE_BUTTON
- #define EDITOR_GADGET7_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
- #define EDITOR_GADGET7_LEFT_EDGE EDITOR_GADGET4_LEFT_EDGE
- #define EDITOR_GADGET7_TOP_EDGE EDITOR_GADGET5_TOP_EDGE
- #define EDITOR_GADGET7_WIDTH EDITOR_GADGET2_WIDTH
- #define EDITOR_GADGET7_HEIGHT EDITOR_GADGET2_HEIGHT
- #define EDITOR_GADGET7_TEXT "_Use"
- #define EDITOR_GADGET7_TEXT_ATTR &topaz80_attr
-
- #define EDITOR_GADGET8_TYPE GADGET_DATA_TYPE_LISTVIEW
- #define EDITOR_GADGET8_FLAGS GADGET_DATA_FLAG_HOTKEY
- #define EDITOR_GADGET8_LEFT_EDGE 10
- #define EDITOR_GADGET8_TOP_EDGE (EDITOR_GADGET1_TOP_EDGE + EDITOR_GADGET1_HEIGHT + 19)
- #define EDITOR_GADGET8_WIDTH 242
- #define EDITOR_GADGET8_HEIGHT 70
- #define EDITOR_GADGET8_TEXT "Defined Tem_plates"
- #define EDITOR_GADGET8_TEXT_ATTR &topaz80_attr
- #define EDITOR_GADGET8_SPACING 0
- #define EDITOR_GADGET8_TOP 1
- #define EDITOR_GADGET8_LIST NULL
-
- /* Statics & globals for editor main gadgets */
-
- BYTE *template_type_text_array[]=
- {
- "Border", "Text", "Button", "Check", "Radio", "String", "Integer",
- "Slider", "Scroller", "Cycle", "Count", "Listview", "Palette", NULL
- };
- STATIC struct GadgetData editor_gadget_data[]=
- {
- {
- EDITOR_GADGET1_TYPE, /* gd_Type */
- EDITOR_GADGET1_FLAGS, /* gd_Flags */
- EDITOR_GADGET1_LEFT_EDGE, /* gd_LeftEdge */
- EDITOR_GADGET1_TOP_EDGE,/* gd_TopEdge */
- EDITOR_GADGET1_WIDTH, /* gd_Width */
- EDITOR_GADGET1_HEIGHT, /* gd_Height */
- EDITOR_GADGET1_TEXT, /* *gd_Text */
- EDITOR_GADGET1_TEXT_ATTR, /* *gd_TextAttr */
- {
- 0, /* gd_CyclePad */
- EDITOR_GADGET1_ACTIVE, /* gd_CycleActive */
- EDITOR_GADGET1_TEXT_ARRAY /* gd_CycleTextArray */
- }
- },
- {
- EDITOR_GADGET2_TYPE, /* gd_Type */
- EDITOR_GADGET2_FLAGS, /* gd_Flags */
- EDITOR_GADGET2_LEFT_EDGE, /* gd_LeftEdge */
- EDITOR_GADGET2_TOP_EDGE,/* gd_TopEdge */
- EDITOR_GADGET2_WIDTH, /* gd_Width */
- EDITOR_GADGET2_HEIGHT, /* gd_Height */
- EDITOR_GADGET2_TEXT, /* *gd_Text */
- EDITOR_GADGET2_TEXT_ATTR, /* *gd_TextAttr */
- {0, 0, 0}
- },
- {
- EDITOR_GADGET3_TYPE, /* gd_Type */
- EDITOR_GADGET3_FLAGS, /* gd_Flags */
- EDITOR_GADGET3_LEFT_EDGE, /* gd_LeftEdge */
- EDITOR_GADGET3_TOP_EDGE,/* gd_TopEdge */
- EDITOR_GADGET3_WIDTH, /* gd_Width */
- EDITOR_GADGET3_HEIGHT, /* gd_Height */
- EDITOR_GADGET3_TEXT, /* *gd_Text */
- EDITOR_GADGET3_TEXT_ATTR, /* *gd_TextAttr */
- {0, 0, 0}
- },
- {
- EDITOR_GADGET4_TYPE, /* gd_Type */
- EDITOR_GADGET4_FLAGS, /* gd_Flags */
- EDITOR_GADGET4_LEFT_EDGE, /* gd_LeftEdge */
- EDITOR_GADGET4_TOP_EDGE,/* gd_TopEdge */
- EDITOR_GADGET4_WIDTH, /* gd_Width */
- EDITOR_GADGET4_HEIGHT, /* gd_Height */
- EDITOR_GADGET4_TEXT, /* *gd_Text */
- EDITOR_GADGET4_TEXT_ATTR, /* *gd_TextAttr */
- {0, 0, 0}
- },
- {
- EDITOR_GADGET5_TYPE, /* gd_Type */
- EDITOR_GADGET5_FLAGS, /* gd_Flags */
- EDITOR_GADGET5_LEFT_EDGE, /* gd_LeftEdge */
- EDITOR_GADGET5_TOP_EDGE,/* gd_TopEdge */
- EDITOR_GADGET5_WIDTH, /* gd_Width */
- EDITOR_GADGET5_HEIGHT, /* gd_Height */
- EDITOR_GADGET5_TEXT, /* *gd_Text */
- EDITOR_GADGET5_TEXT_ATTR, /* *gd_TextAttr */
- {0, 0, 0}
- },
- {
- EDITOR_GADGET6_TYPE, /* gd_Type */
- EDITOR_GADGET6_FLAGS, /* gd_Flags */
- EDITOR_GADGET6_LEFT_EDGE, /* gd_LeftEdge */
- EDITOR_GADGET6_TOP_EDGE,/* gd_TopEdge */
- EDITOR_GADGET6_WIDTH, /* gd_Width */
- EDITOR_GADGET6_HEIGHT, /* gd_Height */
- EDITOR_GADGET6_TEXT, /* *gd_Text */
- EDITOR_GADGET6_TEXT_ATTR, /* *gd_TextAttr */
- {0, 0, 0}
- },
- {
- EDITOR_GADGET7_TYPE, /* gd_Type */
- EDITOR_GADGET7_FLAGS, /* gd_Flags */
- EDITOR_GADGET7_LEFT_EDGE, /* gd_LeftEdge */
- EDITOR_GADGET7_TOP_EDGE,/* gd_TopEdge */
- EDITOR_GADGET7_WIDTH, /* gd_Width */
- EDITOR_GADGET7_HEIGHT, /* gd_Height */
- EDITOR_GADGET7_TEXT, /* *gd_Text */
- EDITOR_GADGET7_TEXT_ATTR, /* *gd_TextAttr */
- {0, 0, 0}
- },
- {
- EDITOR_GADGET8_TYPE, /* gd_Type */
- EDITOR_GADGET8_FLAGS, /* gd_Flags */
- EDITOR_GADGET8_LEFT_EDGE, /* gd_LeftEdge */
- EDITOR_GADGET8_TOP_EDGE,/* gd_TopEdge */
- EDITOR_GADGET8_WIDTH, /* gd_Width */
- EDITOR_GADGET8_HEIGHT, /* gd_Height */
- EDITOR_GADGET8_TEXT, /* *gd_Text */
- EDITOR_GADGET8_TEXT_ATTR, /* *gd_TextAttr */
- {
- EDITOR_GADGET8_SPACING, /* gd_ListViewSpacing */
- EDITOR_GADGET8_TOP, /* gd_ListViewTop */
- EDITOR_GADGET8_LIST /* gd_ListViewList */
- }
- },
- {
- INTUISUP_DATA_END /* mark end of gadget data array */
- }
- };
- /* Defines for editor texts */
-
- #define EDITOR_TEXT1_TYPE TEXT_DATA_TYPE_TEXT
- #define EDITOR_TEXT1_FLAGS TEXT_DATA_FLAG_PLACE_LEFT
- #define EDITOR_TEXT1_LEFT_EDGE (EDITOR_GADGET2_LEFT_EDGE - 8)
- #define EDITOR_TEXT1_TOP_EDGE (EDITOR_GADGET2_TOP_EDGE + (EDITOR_GADGET2_HEIGHT - 8) / 2)
- #define EDITOR_TEXT1_TEXT "Mode"
- #define EDITOR_TEXT1_TEXT_ATTR &topaz80_attr
-
- #define EDITOR_TEXT2_TYPE TEXT_DATA_TYPE_TEXT
- #define EDITOR_TEXT2_FLAGS TEXT_DATA_FLAG_BOLD
- #define EDITOR_TEXT2_LEFT_EDGE EDITOR_GADGET5_LEFT_EDGE
- #define EDITOR_TEXT2_TOP_EDGE (EDITOR_GADGET5_TOP_EDGE + EDITOR_GADGET5_HEIGHT + 10)
- #define EDITOR_TEXT2_TEXT "Template Information:"
- #define EDITOR_TEXT2_TEXT_ATTR &topaz80_attr
-
- #define EDITOR_TEXT3_TYPE TEXT_DATA_TYPE_TEXT
- #define EDITOR_TEXT3_FLAGS TEXT_DATA_FLAG_PLACE_LEFT
- #define EDITOR_TEXT3_LEFT_EDGE (EDITOR_TEXT2_LEFT_EDGE + 20 + 4 * 8)
- #define EDITOR_TEXT3_TOP_EDGE (EDITOR_TEXT2_TOP_EDGE + 14)
- #define EDITOR_TEXT3_TEXT "Name"
- #define EDITOR_TEXT3_TEXT_ATTR &topaz80_attr
-
- #define EDITOR_TEXT4_TYPE TEXT_DATA_TYPE_TEXT
- #define EDITOR_TEXT4_FLAGS TEXT_DATA_FLAG_PLACE_LEFT
- #define EDITOR_TEXT4_LEFT_EDGE EDITOR_TEXT3_LEFT_EDGE
- #define EDITOR_TEXT4_TOP_EDGE (EDITOR_TEXT3_TOP_EDGE + 12)
- #define EDITOR_TEXT4_TEXT "Type"
- #define EDITOR_TEXT4_TEXT_ATTR &topaz80_attr
-
- #define EDITOR_TEXT5_TYPE TEXT_DATA_TYPE_TEXT
- #define EDITOR_TEXT5_FLAGS TEXT_DATA_FLAG_PLACE_LEFT
- #define EDITOR_TEXT5_LEFT_EDGE EDITOR_TEXT4_LEFT_EDGE
- #define EDITOR_TEXT5_TOP_EDGE (EDITOR_TEXT4_TOP_EDGE + 12)
- #define EDITOR_TEXT5_TEXT "Pos"
- #define EDITOR_TEXT5_TEXT_ATTR &topaz80_attr
-
- #define EDITOR_TEXT6_TYPE TEXT_DATA_TYPE_TEXT
- #define EDITOR_TEXT6_FLAGS TEXT_DATA_FLAG_PLACE_LEFT
- #define EDITOR_TEXT6_LEFT_EDGE EDITOR_TEXT5_LEFT_EDGE
- #define EDITOR_TEXT6_TOP_EDGE (EDITOR_TEXT5_TOP_EDGE + 12)
- #define EDITOR_TEXT6_TEXT "Size"
- #define EDITOR_TEXT6_TEXT_ATTR &topaz80_attr
-
- /* Statics for texts */
-
- STATIC struct TextData editor_text_data[]=
- {
- {
- EDITOR_TEXT1_TYPE, /* td_Type */
- EDITOR_TEXT1_FLAGS, /* td_Flags */
- EDITOR_TEXT1_LEFT_EDGE, /* td_LeftEdge */
- EDITOR_TEXT1_TOP_EDGE, /* td_TopEdge */
- EDITOR_TEXT1_TEXT, /* *td_Text */
- EDITOR_TEXT1_TEXT_ATTR /* *td_TextAttr */
- },
- {
- EDITOR_TEXT2_TYPE, /* td_Type */
- EDITOR_TEXT2_FLAGS, /* td_Flags */
- EDITOR_TEXT2_LEFT_EDGE, /* td_LeftEdge */
- EDITOR_TEXT2_TOP_EDGE, /* td_TopEdge */
- EDITOR_TEXT2_TEXT, /* *td_Text */
- EDITOR_TEXT2_TEXT_ATTR /* *td_TextAttr */
- },
- {
- EDITOR_TEXT3_TYPE, /* td_Type */
- EDITOR_TEXT3_FLAGS, /* td_Flags */
- EDITOR_TEXT3_LEFT_EDGE, /* td_LeftEdge */
- EDITOR_TEXT3_TOP_EDGE, /* td_TopEdge */
- EDITOR_TEXT3_TEXT, /* *td_Text */
- EDITOR_TEXT3_TEXT_ATTR /* *td_TextAttr */
- },
- {
- EDITOR_TEXT4_TYPE, /* td_Type */
- EDITOR_TEXT4_FLAGS, /* td_Flags */
- EDITOR_TEXT4_LEFT_EDGE, /* td_LeftEdge */
- EDITOR_TEXT4_TOP_EDGE, /* td_TopEdge */
- EDITOR_TEXT4_TEXT, /* *td_Text */
- EDITOR_TEXT4_TEXT_ATTR /* *td_TextAttr */
- },
- {
- EDITOR_TEXT5_TYPE, /* td_Type */
- EDITOR_TEXT5_FLAGS, /* td_Flags */
- EDITOR_TEXT5_LEFT_EDGE, /* td_LeftEdge */
- EDITOR_TEXT5_TOP_EDGE, /* td_TopEdge */
- EDITOR_TEXT5_TEXT, /* *td_Text */
- EDITOR_TEXT5_TEXT_ATTR /* *td_TextAttr */
- },
- {
- EDITOR_TEXT6_TYPE, /* td_Type */
- EDITOR_TEXT6_FLAGS, /* td_Flags */
- EDITOR_TEXT6_LEFT_EDGE, /* td_LeftEdge */
- EDITOR_TEXT6_TOP_EDGE, /* td_TopEdge */
- EDITOR_TEXT6_TEXT, /* *td_Text */
- EDITOR_TEXT6_TEXT_ATTR /* *td_TextAttr */
- },
- {
- INTUISUP_DATA_END /* mark end of text data array */
- }
- };
- /* Defines for information texts */
-
- #define INFO_TEXT_LINES 4
-
- #define INFO_TEXT_LEFT_EDGE (EDITOR_TEXT3_LEFT_EDGE + 8)
- #define INFO_TEXT_TOP_EDGE EDITOR_TEXT3_TOP_EDGE
- #define INFO_TEXT_TYPE TEXT_DATA_TYPE_TEXT
- #define INFO_TEXT_FLAGS TEXT_DATA_FLAG_COLOR2
- #define INFO_TEXT_ATTR EDITOR_TEXT3_TEXT_ATTR
-
- #define INFO_TEXT_MAX_WIDTH (EDITOR_WINDOW_WIDTH - INFO_TEXT_LEFT_EDGE)
- #define INFO_TEXT_YOFFSET (EDITOR_TEXT4_TOP_EDGE - EDITOR_TEXT3_TOP_EDGE)
-
- #define INFO_LINE_NAME 0
- #define INFO_LINE_TYPE 1
- #define INFO_LINE_POS 2
- #define INFO_LINE_SIZE 3
-
- /* Defines for menu */
-
- #define MENU_TEXT_ATTR &topaz60_attr
-
- #define MENU_PROJECT 0
- #define ITEM_PROJECT_SCREEN 0
- #define ITEM_PROJECT_WINDOW 1
- #define ITEM_PROJECT_NEW 2
- #define ITEM_PROJECT_LOAD 3
- #define ITEM_PROJECT_APPEND 4
- #define ITEM_PROJECT_SAVE 5
- #define ITEM_PROJECT_SAVE_C 6
- #define ITEM_PROJECT_ABOUT 7
- #define ITEM_PROJECT_QUIT 8
-
- #define MENU_EDIT 1
- #define ITEM_EDIT_LOCK 0
- #define ITEM_EDIT_UNLOCK 1
- #define SUBITEM_EDIT_UNLOCK_SINGLE 0
- #define SUBITEM_EDIT_UNLOCK_ALL 1
- #define ITEM_EDIT_SNAP 2
-
- /* Statics for menu */
-
- STATIC struct MenuData editor_menu_data[]=
- {
- {
- MENU_DATA_TYPE_TITLE, 0, "Project"
- },
- {
- MENU_DATA_TYPE_ITEM, 0, "Screen", "R", 0
- },
- {
- MENU_DATA_TYPE_ITEM, 0, "Window", "W", 0
- },
- {
- MENU_DATA_TYPE_ITEM, 0, "New", "N", 0
- },
- {
- MENU_DATA_TYPE_ITEM, 0, "Load", "L", 0
- },
- {
- MENU_DATA_TYPE_ITEM, 0, "Append", "P", 0
- },
- {
- MENU_DATA_TYPE_ITEM, 0, "Save", "S", 0
- },
- {
- MENU_DATA_TYPE_ITEM, 0, "Save as C", "C", 0
- },
- {
- MENU_DATA_TYPE_ITEM, 0, "About", "A", 0
- },
- {
- MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_EMPTY_LINE, "Quit", "Q", 0
- },
- {
- MENU_DATA_TYPE_TITLE, 0, "Edit"
- },
- {
- MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_DISABLED, "Lock", "L", 0
- },
- {
- MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_DISABLED, "Unlock", NULL, 0
- },
- {
- MENU_DATA_TYPE_SUBITEM, 0, "Single", "U", 0
- },
- {
- MENU_DATA_TYPE_SUBITEM, 0, "All", NULL, 0
- },
- {
- MENU_DATA_TYPE_ITEM, 0, "Snap", NULL, 0
- },
- {
- MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE | MENU_DATA_FLAG_SELECTED, "1", NULL, ~(1 << 0)
- },
- {
- MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "2", NULL, ~(1 << 1)
- },
- {
- MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "4", NULL, ~(1 << 2)
- },
- {
- MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "6", NULL, ~(1 << 3)
- },
- {
- MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "8", NULL, ~(1 << 4)
- },
- {
- MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "10", NULL, ~(1 << 5)
- },
- {
- MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "12", NULL, ~(1 << 6)
- },
- {
- MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "14", NULL, ~(1 << 7)
- },
- {
- MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "16", NULL, ~(1 << 8)
- },
- {
- MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "18", NULL, ~(1 << 9)
- },
- {
- MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "20", NULL, ~(1 << 10)
- },
- {
- INTUISUP_DATA_END /* mark end of menu data */
- }
- };
- /* Editor action loop */
-
- SHORT
- editor_action_loop(VOID)
- {
- BOOL keepon = TRUE;
- SHORT status = EDITOR_STATUS_NORMAL;
-
- if (!(egl = ICreateGadgets(eri, &editor_gadget_data[0], 0, 0, NULL)))
- {
- status = EDITOR_ERROR_OUT_OF_MEM;
- }
- else
- {
- if (!(eml = ICreateMenu(eri, ewin, &editor_menu_data[0],
- MENU_TEXT_ATTR, NULL)))
- {
- status = EDITOR_ERROR_OUT_OF_MEM;
- }
- else
- {
- struct TemplateList *tl = &template_list;
- struct MsgPort *eup = ewin->UserPort, *pup = pwin->UserPort;
- LONG emask = 1L << eup->mp_SigBit, pmask = 1L << pup->mp_SigBit, full_mask = emask | pmask;
-
- /* project_file_requester->fr_Flags2 |= FR2F_LongPath;
- strcpy(project_file_requester->fr_File, DEFAULT_PROJECT_FILE_NAME);
-
- csource_file_requester->fr_FuncFlags |= FRF_DoColor;
- csource_file_requester->fr_Flags2 |= FR2F_LongPath;
- csource_file_requester->fr_Hail = CSOURCE_SAVE_HAIL_TEXT;
- strcpy(csource_file_requester->fr_File, DEFAULT_CSOURCE_FILE_NAME);
- */
-
- /* Init template list */
- NewList((struct List *) & tl->tl_Fonts);
- NewList((struct List *) & tl->tl_Templates);
- strcpy(&tl->tl_ProjectID[0], DEFAULT_PROJECT_ID);
- change_project_name(tl, DEFAULT_PROJECT_NAME, -1);
-
- /* Set gadget defaults */
- ISetGadgetAttributes(egl, EDITOR_GADGET_TYPE, 0L, 0L, USE_CURRENT_VALUE,
- (LONG) DEFAULT_TEMPLATE_TYPE, (VOID *) USE_CURRENT_VALUE);
- ISetGadgetAttributes(egl, FIRST_MODE_GADGET + DEFAULT_EDITOR_MODE,
- 0L, 0L, 1L, USE_CURRENT_VALUE, (VOID *) USE_CURRENT_VALUE);
- print_project_window_title();
-
- /* Editor main loop */
- do
- {
- struct Message *msg;
- SHORT last_status;
-
- /* Remove all IDCMP events from editor and project window */
- while (msg = GetMsg(eup))
- {
- ReplyMsg(msg);
- }
- while (msg = GetMsg(pup))
- {
- ReplyMsg(msg);
- }
-
- /* Display editor texts and gadgets, start use mode and attach menu */
- IClearWindow(eri, ewin, 0, 0, EDITOR_WINDOW_WIDTH,
- EDITOR_WINDOW_HEIGHT, 0);
- IDisplayTexts(eri, ewin, &editor_text_data[0], 0, 0, NULL);
- IDisplayGadgets(ewin, egl);
- IAttachMenu(ewin, eml);
- if (editor_mode == EDITOR_MODE_USE)
- {
- start_gadget_use_mode();
- }
-
- /* Editor IDCMP loop */
- do
- {
- LONG signals = Wait(full_mask);
-
- if (signals & emask)
- {
- status = perform_editor_action();
- }
- if (signals & pmask)
- {
- status = perform_project_action();
- }
- }
- while (status <= EDITOR_STATUS_NORMAL);
-
- /* Remove editor gadgets, end gadget use mode and remove menu */
- IRemoveGadgets(egl);
- if (editor_mode == EDITOR_MODE_USE)
- {
- end_gadget_use_mode();
- }
- IRemoveMenu(eml);
-
- /* Perform special action given by status */
- switch (last_status = status)
- {
- case EDITOR_STATUS_EDIT:
- if (selected_template)
- {
- status = edit_template_data();
- }
- break;
-
- case EDITOR_STATUS_SCREEN:
- status = change_project_screen();
- break;
-
- case EDITOR_STATUS_WINDOW:
- status = change_project_window();
- break;
-
- case EDITOR_STATUS_NEW:
- if (!(tl->tl_Flags & TEMPLATE_LIST_FLAG_CHANGED) ||
- ok_cancel_requester(" New ", "Project changed and"
- " not saved.\\n\\nDo you really"
- " want to start a new project?") == TRUE)
- {
- status = new_project(tl,
- TEMPLATE_LIST_FLAG_DEFAULT_WINDOW);
- }
- break;
-
- case EDITOR_STATUS_LOAD:
- if (!(tl->tl_Flags & TEMPLATE_LIST_FLAG_CHANGED) ||
- ok_cancel_requester(" Load ", "Project changed and"
- " not saved.\\n\\nDo you really"
- " want to load a new project?") == TRUE)
- {
- status = load_project(LOAD_MODE_NORMAL);
- }
- break;
-
- case EDITOR_STATUS_APPEND:
- if (!(tl->tl_Flags & TEMPLATE_LIST_FLAG_CHANGED) ||
- ok_cancel_requester(" Append ", "Project changed and"
- " not saved.\\n\\nDo you really"
- " want to append a new project?") == TRUE)
- {
- status = load_project(LOAD_MODE_APPEND);
- }
- break;
-
- case EDITOR_STATUS_SAVE:
- status = save_project();
- break;
-
- case EDITOR_STATUS_SAVE_C:
- status = save_c_source();
- break;
-
- case EDITOR_STATUS_ABOUT:
- about_requester();
- break;
-
- case EDITOR_ERROR_NO_WINDOW:
- keepon = FALSE;
- break;
- }
- if (last_status == EDITOR_STATUS_WINDOW || last_status ==
- EDITOR_STATUS_NEW || last_status == EDITOR_STATUS_LOAD)
- {
-
- /* Get user port data from new project window */
- pup = pwin->UserPort;
- pmask = 1L << pup->mp_SigBit;
- full_mask = emask | pmask;
- }
- if (status == EDITOR_STATUS_QUIT)
- {
- if (!(tl->tl_Flags & TEMPLATE_LIST_FLAG_CHANGED) ||
- ok_cancel_requester(" Quit ", "Project changed and not"
- " saved.\\n\\nDo you really want to quit?") == TRUE)
- {
- keepon = FALSE;
- }
- }
- }
- while (keepon == TRUE);
-
- /* Free resources */
- free_template_list(tl);
- IFreeMenu(eml);
- }
- IFreeGadgets(egl);
- }
- return (status);
- }
-
- /* Perform editor action */
-
- STATIC SHORT
- perform_editor_action(VOID)
- {
- struct MsgPort *up = ewin->UserPort;
- struct IntuiMessage *msg;
- SHORT status = EDITOR_STATUS_NORMAL;
-
- while (msg = IGetMsg(up))
- {
- USHORT entry, code = msg->Code;
- LONG value;
-
- switch (msg->Class)
- {
- case CLOSEWINDOW:
- status = EDITOR_STATUS_QUIT;
- break;
-
- case ISUP_ID:
- entry = code;
- value = (LONG) msg->IAddress;
- switch (entry)
- {
- case EDITOR_GADGET_TYPE:
- template_type = value;
- print_project_window_title();
- break;
-
- case EDITOR_GADGET_TEMPLATES:
- clear_template_info();
- if (get_template_by_num(value))
- {
- print_template_info();
- }
- break;
-
- default:
- change_editor_mode(entry, value);
- break;
- }
- break;
-
- case MENUPICK:
- while (code != MENUNULL)
- {
- switch (MENUNUM(code))
- {
- case MENU_PROJECT:
- switch (ITEMNUM(code))
- {
-
- case ITEM_PROJECT_SCREEN:
- status = EDITOR_STATUS_SCREEN;
- break;
-
- case ITEM_PROJECT_WINDOW:
- status = EDITOR_STATUS_WINDOW;
- break;
-
- case ITEM_PROJECT_NEW:
- status = EDITOR_STATUS_NEW;
- break;
-
- case ITEM_PROJECT_LOAD:
- status = EDITOR_STATUS_LOAD;
- break;
-
- case ITEM_PROJECT_APPEND:
- status = EDITOR_STATUS_APPEND;
- break;
-
- case ITEM_PROJECT_SAVE:
- status = EDITOR_STATUS_SAVE;
- break;
-
- case ITEM_PROJECT_SAVE_C:
- status = EDITOR_STATUS_SAVE_C;
- break;
-
- case ITEM_PROJECT_ABOUT:
- status = EDITOR_STATUS_ABOUT;
- break;
-
- case ITEM_PROJECT_QUIT:
- status = EDITOR_STATUS_QUIT;
- break;
- }
- break;
- case MENU_EDIT:
- switch (ITEMNUM(code))
- {
- case ITEM_EDIT_SNAP:
- snap_offset = snap_offset_table[SUBNUM(code)];
- break;
- }
- break;
- }
- code = IMenuItemAddress(eml, code)->NextSelect;
- }
- break;
- }
- IReplyMsg(msg);
- }
- return (status);
- }
-
- /* Change editor mode */
-
- STATIC VOID
- change_editor_mode(USHORT gadget, LONG value)
- {
- UBYTE new_mode = gadget - FIRST_MODE_GADGET;
- USHORT active_mode_gadget = editor_mode + FIRST_MODE_GADGET;
-
- if (gadget == active_mode_gadget)
- {
-
- /* If active mode gadget deselected so select it again */
- ISetGadgetAttributes(egl, gadget, 0L, 0L, 1L, USE_CURRENT_VALUE,
- (VOID *) USE_CURRENT_VALUE);
- }
- else
- {
-
- /* Deselect active mode gadget and set new editor mode */
- ISetGadgetAttributes(egl, active_mode_gadget, 0L, 0L, 0L,
- USE_CURRENT_VALUE, (VOID *) USE_CURRENT_VALUE);
-
- /* Toggle gadget use mode */
- if (new_mode == EDITOR_MODE_USE)
- {
- start_gadget_use_mode();
- }
- else
- {
- if (editor_mode == EDITOR_MODE_USE)
- {
- end_gadget_use_mode();
- }
- }
- editor_mode = new_mode;
- print_project_window_title();
- }
- }
-
- /* Print infos about current selected template info */
-
- VOID
- print_template_info(VOID)
- {
- struct Template *tp = selected_template;
- USHORT i, top_edge = INFO_TEXT_TOP_EDGE;
-
- /* First clear old info texts */
- if (info_displayed == TRUE)
- {
- IClearWindow(eri, ewin, INFO_TEXT_LEFT_EDGE, INFO_TEXT_TOP_EDGE,
- INFO_TEXT_MAX_WIDTH, INFO_TEXT_TOP_EDGE + INFO_TEXT_LINES *
- INFO_TEXT_YOFFSET - 1, 0);
- draw_box_with_border(pwin, &info_template->tp_Box);
- }
-
- /* Now print new info texts */
- for (i = 0; i < INFO_TEXT_LINES; i++)
- {
- BYTE text[80];
-
- switch (i)
- {
- case INFO_LINE_NAME:
- sprintf(&text[0], "%s", &tp->tp_TemplateName[0]);
- break;
-
- case INFO_LINE_TYPE:
- sprintf(&text[0], "%s", template_type_text_array[tp->tp_Type]);
- break;
-
- case INFO_LINE_POS:
- sprintf(&text[0], "%d,%d", tp->tp_Box.bo_X1, tp->tp_Box.bo_Y1);
- break;
-
- case INFO_LINE_SIZE:
- sprintf(&text[0], "%dx%d", tp->tp_Box.bo_X2 - tp->tp_Box.bo_X1 +
- 1, tp->tp_Box.bo_Y2 - tp->tp_Box.bo_Y1 + 1);
- break;
- }
- IPrintText(eri, ewin, &text[0], INFO_TEXT_LEFT_EDGE, top_edge,
- INFO_TEXT_TYPE, INFO_TEXT_FLAGS, INFO_TEXT_ATTR);
- top_edge += INFO_TEXT_YOFFSET;
- }
- draw_box_with_border(pwin, &tp->tp_Box);
- info_template = tp;
- info_displayed = TRUE;
- }
-
- /* Clear template info */
-
- VOID
- clear_template_info(VOID)
- {
- if (info_displayed == TRUE)
- {
- IClearWindow(eri, ewin, INFO_TEXT_LEFT_EDGE, INFO_TEXT_TOP_EDGE,
- INFO_TEXT_MAX_WIDTH, INFO_TEXT_TOP_EDGE + INFO_TEXT_LINES *
- INFO_TEXT_YOFFSET - 1, 0);
- draw_box_with_border(pwin, &info_template->tp_Box);
- info_template = NULL;
- info_displayed = FALSE;
- }
- }
-
- /* Start gadget use mode */
-
- VOID
- start_gadget_use_mode(VOID)
- {
- struct TemplateList *tl = &template_list;
- USHORT num = tl->tl_GadgetTemplates;
- SHORT status = EDITOR_STATUS_NORMAL;
-
- if (num)
- {
- struct GadgetData *gd;
-
- if (!(use_gd = gd = AllocMem((LONG) (num + 1) *
- sizeof(struct GadgetData), (LONG) MEMF_PUBLIC)))
- {
- status = EDITOR_ERROR_OUT_OF_MEM;
- }
- else
- {
- struct Template *tp;
-
- for (tp = get_head((struct List *) & tl->tl_Templates); tp;
- tp = get_succ(&tp->tp_Node))
- {
- if (TEMPLATE_GROUP(tp) == TEMPLATE_GROUP_GADGET)
- {
- CopyMem((BYTE *) & tp->tp_Data.tp_GadgetData, (BYTE *) gd++,
- (LONG) sizeof(struct GadgetData));
- }
- }
- gd->gd_Type = INTUISUP_DATA_END; /* mark end of gadget data array */
- if (!(use_gl = ICreateGadgets(pri, use_gd, 0, 0, NULL)))
- {
- FreeMem(use_gd, (LONG) (num + 1) * sizeof(struct GadgetData));
- status = EDITOR_ERROR_OUT_OF_MEM;
- }
- else
- {
- IDisplayGadgets(pwin, use_gl);
- }
- }
- show_error(status);
- }
- }
-
- /* End gadget use mode */
-
- VOID
- end_gadget_use_mode(VOID)
- {
- USHORT num = template_list.tl_GadgetTemplates;
-
- if (num)
- {
- IRemoveGadgets(use_gl);
- IFreeGadgets(use_gl);
- FreeMem(use_gd, (LONG) (num + 1) * sizeof(struct GadgetData));
- }
- }
-